﻿using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

using MySql.Data.MySqlClient;
using MySql.Data.Types;
using System.Data.Sql;
using System.Data.SqlClient;

// Espacio de nombres para los contenedores.
namespace GCon
{
    /// <summary>
    /// Clase contenedora de Curso
    /// </summary>
    public class Con_Curso
    {
        /// <summary>
        /// Constructor por defecto
        /// </summary>
        public Con_Curso()
        {
            
        }

        /// <summary>
        /// Constructor con todos los parametros
        /// </summary>
        /// <param name="ID_PK"></param>
        /// <param name="NOMBRE"></param>
        /// <param name="DESCRIPCION"></param>
        /// <param name="PRECIO"></param>
        /// <param name="DURACION"></param>
        public Con_Curso(String ID_PK, String NOMBRE, String DESCRIPCION, String PRECIO, String DURACION, String MODALIDAD)
        {
            this._ID_PK = ID_PK;
            this._NOMBRE = NOMBRE;
            this._DESCRIPCION = DESCRIPCION;
            this._PRECIO = PRECIO;
            this._DURACION = DURACION;
            this._MODALIDAD_ID_PK = MODALIDAD;
        }

        /// <summary>
        /// Constructor de copia
        /// </summary>
        /// <param name="otra"></param>
        public Con_Curso(Con_Curso otra)
        {
            this._ID_PK = otra._ID_PK;
            this._NOMBRE = otra._NOMBRE;
            this._DESCRIPCION = otra._DESCRIPCION;
            this._PRECIO = otra._PRECIO;
            this._DURACION = otra._DURACION;
            this._MODALIDAD_ID_PK = otra._MODALIDAD_ID_PK;
        }

        /// Getters
        public String Get_ID_PK ()
        {
            return this._ID_PK;
        }
        public String Get_NOMBRE ()
        {
            return this._NOMBRE;
        }
        public String Get_DESCRIPCION ()
        {
            return this._DESCRIPCION;
        }
        public String Get_PRECIO()
        {
            return this._PRECIO;
        }
        public String Get_DURACION()
        {
            return this._DURACION;
        }
        public String Get_MODALIDAD_ID_PK()
        {
            return this._MODALIDAD_ID_PK;
        }
        /// Setters
        public void Set_ID_PK (String parametro)
        {
            this._ID_PK = parametro;
        }
        public void Set_NOMBRE(String parametro)
        {
            this._NOMBRE = parametro;
        }
        public void Set_DESCRIPCION(String parametro)
        {
            this._DESCRIPCION = parametro;
        }
        public void Set_PRECIO(String parametro)
        {
            this._PRECIO = parametro;
        }
        public void Set_DURACION(String parametro)
        {
            this._DURACION = parametro;
        }
        public void Set_MODALIDAD_ID_PK(String parametro)
        {
            this._MODALIDAD_ID_PK = parametro;
        }

        /// <summary>
        /// Procedimiento de carga.
        /// Recupera de la BBDD el curso con Id = IdCurso.
        /// </summary>
        /// <param name="IdCurso"></param>
        public void CargaCurso(int IdCurso)
        {
            MySqlConnection oConexion;
            MySqlDataAdapter oAdaptador;
            DataSet ds;
            String llamada;

            oConexion = new MySqlConnection();
            oConexion.ConnectionString = "Server=localhost;Database=MERYLAND;Uid=root;Pwd=MERYLAND;";
            oConexion.Open();

            llamada = "CALL CargaCurso ( '" + IdCurso + "' );";
            oAdaptador = new MySqlDataAdapter(llamada, oConexion);
            ds = new DataSet();
            oAdaptador.Fill(ds, "Tabla");

            foreach (DataRow dr in ds.Tables[0].Rows)
            {
                this._ID_PK = dr["CURSO_ID_PK"].ToString();
                this._NOMBRE = dr["CURSO_NOMBRE"].ToString();
                this._DESCRIPCION = dr["CURSO_DESCRIPCION"].ToString();
                this._PRECIO = dr["CURSO_PRECIO"].ToString();
                this._DURACION = dr["CURSO_DURACION"].ToString();
                this._MODALIDAD_ID_PK = dr["MODALIDAD_ID_PK"].ToString();
            }

            oConexion.Close();
        }

        /// <summary>
        /// Procedimiento de inserción.
        /// Inserta en la BBDD un Curso.
        /// </summary>
        public void InsertaCurso()
        {
            MySqlConnection oConexion;
            MySqlCommand oComando;
            String llamada;

            oConexion = new MySqlConnection();
            oConexion.ConnectionString = "Server=localhost;Database=MERYLAND;Uid=root;Pwd=MERYLAND;";

            llamada = "CALL InsertaCurso ( '" + this._NOMBRE + "','" + this._DESCRIPCION + "','" + this._PRECIO + "','" + this._DURACION + "','" + this._MODALIDAD_ID_PK + "' );";
            oComando = new MySqlCommand(llamada, oConexion);

            oConexion.Open();
            oComando.ExecuteReader();

            oConexion.Close();
        }

        /// <summary>
        /// Procedimiento de modificación.
        /// Modifica en la BBDD un Curso.
        /// </summary>
        public void ModificaCurso()
        {
            MySqlConnection oConexion;
            MySqlCommand oComando;
            String llamada;

            oConexion = new MySqlConnection();
            oConexion.ConnectionString = "Server=localhost;Database=MERYLAND;Uid=root;Pwd=MERYLAND;";

            llamada = "CALL ModificaCurso ( '" + this._ID_PK + "','" + this._NOMBRE + "','" + this._DESCRIPCION + "','" + this._PRECIO + "','" + this._DURACION + "','" + this._MODALIDAD_ID_PK + "' );";
            oComando = new MySqlCommand(llamada, oConexion);

            oConexion.Open();
            oComando.ExecuteReader();

            oConexion.Close();
        }

        /// <summary>
        /// Procedimiento de eliminación.
        /// Elimina de la BBDD un Curso.
        /// </summary>
        public void EliminaCurso()
        {
            MySqlConnection oConexion;
            MySqlCommand oComando;
            String llamada;

            oConexion = new MySqlConnection();
            oConexion.ConnectionString = "Server=localhost;Database=MERYLAND;Uid=root;Pwd=MERYLAND;";

            llamada = "CALL EliminaCurso ( '" + this._ID_PK + "' );";
            oComando = new MySqlCommand(llamada, oConexion);

            oConexion.Open();
            oComando.ExecuteReader();

            oConexion.Close();
        }

        /// <summary>
        /// Procedimiento de asignacion de asignatura a curso.
        /// Mete una asignatura de la BBDD a un curso.
        /// </summary>
        public void AsignaAsignaturaAcurso(String idAsignatura)
        {
            MySqlConnection oConexion;
            MySqlCommand oComando;
            String llamada;

            oConexion = new MySqlConnection();
            oConexion.ConnectionString = "Server=localhost;Database=MERYLAND;Uid=root;Pwd=MERYLAND;";

            llamada = "CALL AsignaAsignaturaAcurso ( '" + this._ID_PK  + "," + idAsignatura + "' );";
            oComando = new MySqlCommand(llamada, oConexion);

            oConexion.Open();
            oComando.ExecuteReader();

            oConexion.Close();
        }

        /// <summary>
        /// Procedimiento de eliminación de asignatura a curso.
        /// Elimina una asignatura de la BBDD a un curso.
        /// </summary>
        public void EliminaAsignaturaDeCurso(String idAsignatura)
        {
            MySqlConnection oConexion;
            MySqlCommand oComando;
            String llamada;

            oConexion = new MySqlConnection();
            oConexion.ConnectionString = "Server=localhost;Database=MERYLAND;Uid=root;Pwd=MERYLAND;";

            llamada = "CALL EliminarAsignaturaDeCurso ( '" + this._ID_PK + "," + idAsignatura + "' );";
            oComando = new MySqlCommand(llamada, oConexion);

            oConexion.Open();
            oComando.ExecuteReader();

            oConexion.Close();
        }

        /// Atributos
        private String _ID_PK;
        private String _NOMBRE;
        private String _DESCRIPCION;
        private String _PRECIO;
        private String _DURACION;
        private String _MODALIDAD_ID_PK;
    }
}
